package pack0711.com;

import org.w3c.dom.ls.LSOutput;

import java.util.List;
import java.util.Scanner;

public class BankManager {
    private static Scanner scan = new Scanner(System.in) ;

    //创建一个集合存放所有注册的用户
    private static List<User>users=null;

    //定义管理员的账号和密码
    private static String adminId="111111";
    private static String adminPass="111111";

    static{
        users=FileOP.readFile();
    }

    //注册功能
    public static void register(){
        System.out.println("请输入姓名: ");
        String name=scan.next();
        System.out.println("请输入密码: ");
        String pass;
        //判断密码是否符合要求
        while(true){
            pass=scan.next();
            if(pass.trim().length()<3||pass.trim().length()>6){
                System.out.println("密码长度必须在3-6位之间,请重新输入: ");
                continue;
            }
            System.out.println("请再次确认密码: ");
            String repass=scan.next();
            if(!pass.equals(repass)){
                System.out.println("两次密码不一致,请重新输入: ");
                continue;
            }
            break;
        }
        User user=new User();
        System.out.println("是否预存金额?y/n");
        String op=scan.next();
        if("y".equalsIgnoreCase(op)){      //忽略大小写
            //说明用户想预存金额
            System.out.println("请输入要预存的金额");
            int money=Tools.getMoney();
            user.setBalance(money);
        }

        //创建用户的id,并封装数据
        String id=Tools.getNewId();

        user.setId(id);
        user.setName(name);
        user.setPass(pass);

        //将用户添加到集合中,并将集合保存到硬盘上
        users.add(user);

        //添加历史记录
        String s=Tools.getCurrentDate()+"用户: "+user.getName()+"成功注册";
        user.getHistory().add(s);

        //保存到硬盘
        FileOP.writeFile(users);

        System.out.println("注册成功,你的账号是: "+id);

    }

    //登录
    public static User login() {
        System.out.println("请输入账号: ");
        String id=scan.next();
        System.out.println("请输入密码: ");
        String pass=scan.next();

        //验证用户
        int n=users.indexOf(new User(id,pass));

        if(n==-1){
            //账号密码错误
            System.out.println("账号或者密码错误");
            return null;
        }else {
            //账号密码没问题
            //还需要判断用户是否是冻结账户
            if (users.get(n).isStatus()) {
                return users.get(n);
            } else {
                System.out.println("你的账户已被冻结,不能使用");
                return null;
            }
        }
    }
    //管理员登录
    public static boolean adminLogin() {
        System.out.println("请输入管理员账号: ");
        String id=scan.next();
        System.out.println("请输入管理员密码: ");
        String pass=scan.next();
        if(adminId.equalsIgnoreCase(id)&&adminPass.equals(pass))
        return true;
        return false;
    }

    //查看账户余额
    public static void lookBalance(User user) {
        System.out.println("账户余额: "+user.getBalance()+"¥");
    }

    //取钱
    public static void getCash(User user) {
        //1.提示用户输入要取得金额:
        System.out.println("请输入取款金额: ");

        int money =Tools.getMoney();

        //2.判断用户的余额是否足够
        if(user.getBalance()<money){
            System.out.println("账户余额不足,取钱失败");
            return;   //退出此方法
        }

        //账户的余额足够
        user.setBalance(user.getBalance()-money);

        //提示用户取钱成功
        System.out.println("取钱成功,你的账户余额:"+user.getBalance()+"¥");

        //添加历史记录
        String s=Tools.getCurrentDate()+"用户:"+user.getName()+"(id:"+user.getId()+")"+"取钱:"+money+"¥,账户余额"+user.getBalance()+"¥";
        user.getHistory().add(s);

        //保存到硬盘上
        FileOP.writeFile(users);
    }

    //存钱
    public static void saveCash(User user) {
        //1.提示用户输入要存的金额:
        System.out.println("请输入要存款的金额:  ");

        int money=Tools.getMoney();

        //修改账户的余额
        user.setBalance(user.getBalance()+money);

        //提示用户存钱成功
        System.out.println("存钱成功,你的余额是: "+user.getBalance()+"¥");

        //做历史记录
        String s=Tools.getCurrentDate()+"用户:"+user.getName()+"(id:"+user.getId()+")"+"存钱"+money+"¥,账户余额:"+user.getBalance()+"¥";
        user.getHistory().add(s);

        //保存数据到硬盘上
        FileOP.writeFile(users);
    }

    //转账
    public static void changeMoney(User user) {

        //1.提示用户输入要转入的账户的账号
        System.out.println("请输入要转入的账号: ");
        String toId=scan.next();

        //2.判断此账号是否存在
        User touser =Tools.exists(users,toId);
        if(touser==null){
            System.out.println("输入的账号有误,转账失败");
            return;
        }

        //3.提示用户要转入的金额
        System.out.println("请输入要转入的金额: ");
        int money=Tools.getMoney();

        //4.判断余额是否足够
        if(user.getBalance()<money){
            System.out.println("账户余额不足,转账失败");
            return;
        }

        //5.开始转账
        user.setBalance(user.getBalance()-money);
        touser.setBalance(user.getBalance()+money);

        //提示用户
        System.out.println("转账成功,账户余额: "+user.getBalance()+"¥");

        //做历史记录
        String s=Tools.getCurrentDate()+"用户: "+user.getName()+"(id:"+user.getId()+")"+"向用户: "+touser.getName()+"(id:"+touser.getId()+")转账"+money+"¥,账户余额: "+user.getBalance()+"¥";
        user.getHistory().add(s);
        String s1=Tools.getCurrentDate()+"用户: "+user.getName()+"(id:"+user.getId()+")"+"向你: "+touser.getName()+"(id:"+touser.getId()+")转账"+money+"¥,账户余额: "+touser.getBalance()+"¥";
        user.getHistory().add(s1);

        //保存数据到硬盘上
        FileOP.writeFile(users);
    }

    //查看历史记录
    public static void lookHistory(User user) {
        System.out.println("你的历史记录如下:  ");
        List<String>list=user.getHistory();

        for (int i = 0; i <list.size() ; i++) {
            System.out.println(list.get(i));
        }
    }

    //修改密码
    public static void modifyPass(User user) {
        System.out.println("请输入新密码: ");
        String pass=null;
        while(true){
            pass=scan.next();
            if(pass.trim().length()<3||pass.trim().length()>6){
                System.out.println("密码长度必须在3-6位之间,请重新输入");
                continue;
            }
            System.out.println("请再次确认密码");
            String repass=scan.next();
            if(!pass.equals(repass)){
                System.out.println("两次密码不一致,请重新输入: ");
                continue;
            }
            break;
        }

        //修改密码
        user.setPass(pass);
        System.out.println("恭喜你,密码修改成功");

        String s1=Tools.getCurrentDate()+"用户: "+user.getName()+"(id:"+user.getId()+")"+"修改了新密码,新的密码是:"+pass;
        user.getHistory().add(s1);

        //保存数据到硬盘上
        FileOP.writeFile(users);
    }

    //查看所有用户的信息
    public static void lookAllUserInfo() {
        System.out.println("编号\t\t用户名\t\t余额(¥)\t\t状态");
        for (int i = 0; i <users.size() ; i++) {
            User user=users.get(i);
            System.out.println(user.getId()+"\t\t\t"+user.getName()+"\t\t"+user.getBalance()+"\t\t"+(user.isStatus()?"正常":"已冻结"));

        }
    }

    //冻结账户
    public static void froozeUser() {
        //1.提示用户输入要冻结的账号
        System.out.println("请输入要冻结的账号");
        String id=scan.next();

        //2.检查账号是否存在
        User user=Tools.exists(users,id);

        if(user==null){
            System.out.println("没有此账号,冻结失败");
            return;
        }

        //账号是存在的
        if(!user.isStatus()){
            System.out.println("此账户已经被冻结,不可以再次冻结");
            return;
        }

        //冻结
        user.setStatus(false);

        //提示用户
        System.out.println("恭喜你,成功冻结了账号: "+user.getId()+"("+user.getName()+")");

        //保存数据到硬盘上
        FileOP.writeFile(users);
    }

    //恢复账户
    public static void discoverUser() {
        //1.提示用户输入要恢复的账号
        System.out.println("请输入要恢复的账号: ");
        String id=scan.next();

        //2.检查账号是否存在
        User user=Tools.exists(users,id);

        if(user==null){
            System.out.println("没有此账号,恢复失败");
            return;
        }

        //账号是存在的
        if(user.isStatus()){
            System.out.println("账号是正常状态,不需要恢复");
            return;
        }

        //被冻结
        user.setStatus(true);

        //提示用户
        System.out.println("成功恢复账号:"+user.getId()+"("+user.getName()+")");

        //保存数据到硬盘上
        FileOP.writeFile(users);

    }

    //查看冻结账户

    public static void lookFroozeUsers() {
        System.out.println("冻结账户如下: ");
        System.out.println("编号\t\t用户名\t\t余额(¥)\t\t状态");
        for (int i = 0; i < users.size(); i++) {
            User user=users.get(i);
            if(!user.isStatus())
                System.out.println(user.getId()+"\t\t"+user.getName()+"\t\t"+user.getBalance()+"\t\t已冻结");
        }
    }
}
